<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <button>点击</button>
  <script>
    var that;
    class Star {
      constructor(uname, age) {
        that = this
        this.uname = uname;
        this.age = age;
        this.btn = document.querySelector('button')
        this.btn.onclick = this.sing
      }
      sing() {
        // WebAPI中学习的 事件处理函数中的 this 指向 绑定者
        // this  -->  指向调用方法的对象
        // this  -->  btn
        console.log(this)
        // console.log(this.uname); // undefined
        console.log(that.uname); // undefined
      }

      dance() {
        console.log(this.uname)
      }

    }

    var ldh = new Star('刘德华');
    ldh.sing()
    ldh.dance()
    
    // ldh.btn = document.querySelector('button')
    // ldh.btn.onclick = function() {
    //   console.log('刘德华点击了')
    // }

    // var zxy = new Star('张学友')
    // console.log(zxy.btn)

    // 1. 在 ES6 中类没有变量提升，所以必须先定义类，才能通过类实例化对象

    // 2. 类里面的共有的属性和方法一定要加this使用.

  </script>
</body>

</html